from mongoengine import *
from mongoengine.queryset.visitor import Q

x=connect('admin',host='gdchina.work',username='wjb711',password='打死我也不说',port=27017)

#定义表名和字段，属性
class Sites(Document):
    name=StringField()
    alexa=StringField()
    url=StringField()
   

#新增demo
#Sites(name='santaihu',alexa='201',url='http://www.santaihu.com').save()
#Sites(name='QQ',alexa='100',url='http://www.qq.com').save()
#Sites(name='Taobao',alexa='300',url='http://www.taobao.com').save()


#查询
#for item in Sites.objects(Q(name='QQ')):
#    print(item,item.id,item.name,item.alexa,item.url)

##可用的运算符如下：
# – 小于<
##lte – 小于等于≤
##gt – 大于>
##gte – 大于等于 ≥
##not – 否定一个标准的检查，需要用在其他操作符之前(e.g. Q(age__not__mod=5))
##in – 值在 list 中
##nin – 值不在 list 中
##mod – value % x == y, 其中 x 和 y 为给定的值
##all – list 里面所有的值
##size – 数组的大小
##exists – 存在这个值
##字符串查询
##以下操作符可以快捷的进行正则查询：
##exact – 字符串型字段完全匹配这个值
##iexact – 字符串型字段完全匹配这个值（大小写敏感）
##contains – 字符串字段包含这个值
##icontains – 字符串字段包含这个值（大小写敏感）
##startswith – 字符串字段由这个值开头
##istartswith – 字符串字段由这个值开头（大小写敏感）
##endswith – 字符串字段由这个值结尾
##iendswith – 字符串字段由这个值结尾（大小写敏感）
##match – 执行 $elemMatch 操作，所以你可以使用一个数组中的 document 实例

#高级查询 或查询demo
#for item in Sites.objects(Q(name='santaihu')|Q(name='QQ')):
#    print(item.id,item.name,item.alexa,item.url)

#高级查询 且查询demo
#for item in Sites.objects(Q(name='santaihu')&Q(alexa='200')):
#    print(item.id,item.name,item.alexa,item.url)

#更新
#Sites.objects(Q(name='santaihu')&Q(alexa='201')).update(alexa='202')
#删除
#Sites.objects(Q(name='santaihu')&Q(alexa='200')).delete()
#查询所有
#for item in Sites.objects():
#    print(item.id,item.name,item.alexa,item.url)

#数据库备份
#mongodump -h 127.0.0.1 -d admin -o dbdirectory -u=wjb711 -p=Beijing123
#mongorestore -h <hostname><:port> -d dbname <path>